package com.cn.wanxi.util;

import com.cn.wanxi.model.UserModel;

import java.sql.*;

public class JDBC {
    //        1.要用到mysql，就必须下载mysql包，将包加载到项目里面
//    加载驱动我们只加载一次
//    类的加载顺序：static  静态  只执行一次   在内存里面只有一次
    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 为了避免在其他地方创建对象，则创建一个私有的构造方法
     */
    private JDBC() {
    }

    /**
     * 取得连接只能查询和更新的两个方法访问，不能在其他地方调用
     *
     * @return
     */
    private static Connection getConnnection() {
        String url = "jdbc:mysql://121.199.55.96:3306/canyin04?serviceTimezone=UTC&characterEncoding=UTF-8";
        String user = "canyin04";
        String pass = "123456";
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(url, user, pass);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }

    /**
     * 连接数据库
     *
     * @return
     */
    public static int update(String sql) {

        PreparedStatement preparedStatement = null;
        int count = 0;
        try {
            preparedStatement = getConnnection().prepareStatement(sql);
//            4.执行sql语句，并返回影响的条数
            count = preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        System.out.println(count);
        return count;
    }

    public static ResultSet query(String sql) {
//        3.编译sql语句
//        String sql = "select * from user where id=222";
        PreparedStatement preparedStatement = null;
//        ResultSet理解为数据库的查询结果
        ResultSet resultSet = null;
        try {
            preparedStatement = getConnnection().prepareStatement(sql);
//            4.执行sql语句，并返回查询的结果
            resultSet = preparedStatement.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
//        finally {
//            if (preparedStatement != null) {
//                try {
//                    preparedStatement.close();
//                } catch (SQLException e) {
//                    e.printStackTrace();
//                }
//            }
//        }

        return resultSet;
    }

    /**
     * 查询总条数时，必须将总条数名一个别名叫做count
     * @param sql
     * @return
     */
    public static Integer getCount(String sql) {
//        String sql = "select count(*) count from user";
        ResultSet resultSet = JDBC.query(sql);
        try {
            while (resultSet.next()) {
                return resultSet.getInt("count");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }
}
